﻿using System;
using PTiRouZ.Net.SilverLight.Api;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Runtime.Serialization;

namespace PTiRouZ.Net.SilverLight.Api.HelloTipi
{
    /*
        d = int (identifiant de l’utilisateur)
    name = char (nom complet de l’utilisateur)
    screen_name = char (identifiant de l’utilisateur)
    location = char (non utilisé)
    description = char (non utilisé)
    profile_image_url = char (url de l’image du profil de l’utilisateur)
    url = char (non utilisé)
    protected = bool (non utilisé)
    followers_count = int (non utilisé)
    profile_background_color = char (non utilisé)
    profile_text_color = char (non utilisé)
    profile_link_color = char (non utilisé)
    profile_sidebar_fill_color = char (non utilisé)
    profile_sidebar_border_color = char (non utilisé)
    friends_count = int (non utilisé)
    created_at = date (non utilisé)
    favourites_count = bool (non utilisé)
    utc_offset = char (non utilisé)
    time_zone = char (non utilisé)
    following = bool (non utilisé)
    notifications = bool (non utilisé)
    statuses_count = int (non utilisé)
    status = char (non utilisé)
        */
    /// <summary>Objet correspondant à la requre user/show</summary>
    /// <see cref="show"></see>
    public class show
    {
        /// <summary>Id de l'utilisateur</summary>
        [DataMember]
        public int id { get; set; }

        /// <summary>nom complet de l’utilisateur</summary>
        [DataMember]
        public string name { get; set; }

        /// <summary>Pseudonyme de l'utilisateur</summary>
        [DataMember]
        public string screen_name { get; set; }

        //location = char (non utilisé)
        //description = char (non utilisé)

        /// <summary>url de l'avatar du user</summary>
        /// <remarks>url valide 1h</remarks>
        [DataMember]
        public string profile_image_url { get; set; }

        //url = char (non utilisé)
        //protected = bool (non utilisé)
        //followers_count = int (non utilisé)
        //profile_background_color = char (non utilisé)
        //profile_text_color = char (non utilisé)
        //profile_link_color = char (non utilisé)
        //profile_sidebar_fill_color = char (non utilisé)
        //profile_sidebar_border_color = char (non utilisé)
        //friends_count = int (non utilisé)
        //created_at = date (non utilisé)
        //favourites_count = bool (non utilisé)
        //utc_offset = char (non utilisé)
        //time_zone = char (non utilisé)
        //following = bool (non utilisé)
        //notifications = bool (non utilisé)
        //statuses_count = int (non utilisé)
        //status = char (non utilisé)
    }

    public delegate void ShowEventHandler(object sender, ShowEventArgs e);

    public class ShowEventArgs : EventArgs
    {
        public ShowEventArgs(show s)
        {
            _result = s;
        }

        private show _result;
        public show result { get { return _result; } }
    }
    public partial class apitxt : api
    {

        public event ShowEventHandler ShowCompleted;

        /// <summary>Permet de récupérer les informations d’un utilisateur donné (par défaut l’utilisateur authentifié) si celui-ci est dans vos contacts.</summary>
        /// <returns>Retourne une structure <see cref="show"/></returns>
        /// <example>http://apitxt.hellotipi.com/user/show.json</example>
        public void show(string id)
        {
            base.APICallCompleted += new APICallCompletedEventHandler(ShowCallCompleted);
            GetUrlApi(String.Format("user/show/{0}.json", id));
        }

        void ShowCallCompleted(object sender, ApiOpenReadCompletedEventArgs e)
        {
            try
            {
                ShowCompleted.Invoke(sender, new ShowEventArgs(serializeTools.Deserialize<show>(e.Result)));
            }
            finally
            {
                base.APICallCompleted -= new APICallCompletedEventHandler(ShowCallCompleted);
            }
        }

    }
}
